// 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
// 如果存在多个数字二进制中 1 的数目相同，则必须将它们按照数值大小升序排列。
// 请你返回排序后的数组。
// 示例 1：

// 输入：arr = [0,1,2,3,4,5,6,7,8]
// 输出：[0,1,2,4,8,3,5,6,7]
// 解释：[0] 是唯一一个有 0 个 1 的数。
// [1,2,4,8] 都有 1 个 1 。
// [3,5,6] 有 2 个 1 。
// [7] 有 3 个 1 。
// 按照 1 的个数排序得到的结果数组为 [0,1,2,4,8,3,5,6,7]

//使用排序方法！
class Solution {
    public int[] sortByBits(int[] arr) {
        int len = arr.length;
        int[] array = new int[10001]; //因为数组的最大值为10^4；
        int[] a = new int[len];
        List<Integer> result = new ArrayList<>();
        for(int i=0;i<len;i++)
        {
            int count = 0;
            int k = arr[i];
            while(k!=0)
            {
                if(k%2==1)
                    count++;
                k = k/2;
            }
            array[arr[i]] = count;
            result.add(arr[i]);
        }
        Collections.sort(result,new Comparator<Integer>(){    //又到了背诵环节 简单好理解
            public int compare(Integer a, Integer b)
            {
                if(array[a]!=array[b])
                    return array[a]-array[b];
                else
                    return a-b;
            }
        });
        for(int i=0;i<len;i++)
        {
            a[i]=result.get(i);
        }
        return a;
    }
}